<?php
include_once "Rol.php";
include_once "Track.php";
include_once "Pais.php";
include_once "Institucion.php";
include_once "TipoDocumento.php";
include_once "TipoParticipante.php";
include_once "Transaccion.php";

class Usuario
{
    public $IdUsuario;
    public $Nombres;
    public $Paterno;
    public $Materno;
    public $Contrasena;
    public $IdInstitucion;
    public $IdPais;
    public $Email;
    public $Genero;
    
    //Los pagos
    public $Telefono;
	public $Cargo;
    public $WebSite;
    public $NombreCompleto;
    public $CodigoPostal;
    public $Direccion;
    public $Provincia;
    public $Ciudad;
    public $RestriccionesAlimentarias;
    public $IdTipoDocumento;
    public $NumeroDocumento;
	public $ClienteSAP;
    
    //Si es un solo track
    public $IdTrack;
    public $Track;    
    public $Institucion;    
    public $EsDeseoModerador;
    public $EsDeseoPanelista;
    public $EsDeseoRevisor;
            
    //Atributos Objetos asociados
    public $Pais;
    public $Roles;    
    public $Tracks;
    public $Idiomas;
    public $Participante;
    public $TipoDocumento;
    
    //Almacena el estado de la calificacion de un revisor en particular
    public $EstadoDeRevisor;
	
	//Es la transaccion exitosa
	public $Transaccion;
    
	public $idiomaRegistro;
	public $NombreCredencial;
	public $destinatarioComprobante;
	public $rucNacional;
	
    public function __construct(){}
    
    public function CargarUsuario($idUsuario){
            global $dbh;
                
        $sql = 'select 
                    idusuario,
                    nombres,
                    paterno,
                    materno,
                    email,
                    idinstitucion,
                    contrasena,
                    idpais,
                    genero,
                    idtrack,
					ClienteSAP,
					
                    from usuario
                where idusuario = \''.$idUsuario.'\'';
                        
        foreach($dbh->query($sql) as $row) {
                $this->Email = $row['email'];
                $this->IdUsuario = $row['idusuario'];
                $this->IdPais = $row['idpais'];
                $this->IdInstitucion = $row['idinstitucion'];
                $this->IdTrack = $row['idtrack'];
                $this->Nombres = $row['nombres'];
                $this->Paterno = $row['paterno'];
                $this->Materno = $row['materno'];
                $this->Contrasena = $row['contrasena'];
                $this->Genero = $row['genero'];
                $this->Direccion = $row['direccion'];
                
                $this->Roles = Usuario::ListarRolPorIdUsuario($idUsuario);
                $this->Track = Track::Obtener($row["idtrack"]);
                
				$this->ClienteSAP = Pais::Obtener($row["ClienteSAP"]);
                $this->Institucion = Institucion::Obtener($row["idinstitucion"]);
        }
    }
    
    static public function VerificarCorreo($email){
        global $dbh;
                
        $sql = 'select 
                    idusuario,
                    nombres,
                    paterno,
                    materno,
                    email,
                    idinstitucion,
                    contrasena
                    from usuario
                where email = \''.$email.'\'';

        $obj = new Usuario();		
        foreach($dbh->query($sql) as $row) {
                $obj->Email = $row['email'];
                $obj->IdUsuario = $row['idusuario'];
                $obj->Nombres = $row['nombres'];
                $obj->Paterno = $row['paterno'];
                $obj->Materno = $row['materno'];
                $obj->Contrasena = $row['contrasena'];
                $obj->Roles = Usuario::ListarRolPorIdUsuario($obj->IdUsuario);
        }
        return $obj;                
    }
        
    static public function VerificarTipoDocumento($idTipoDocumento, $numeroDocumento){
        global $dbh;
                
        $sql = 'select 
                    idusuario,
                    nombres,
                    paterno,
                    materno,
                    email,
                    idinstitucion,
                    contrasena
                    from usuario
                where
                idtipodocumento = \''.$idTipoDocumento.'\'
                and 
                numerodocumento = \''.$numeroDocumento.'\'
                '                
                ;

        $obj = new Usuario();
        foreach($dbh->query($sql) as $row) {
                $obj->Email = $row['email'];
                $obj->IdUsuario = $row['idusuario'];
                $obj->Nombres = $row['nombres'];
                $obj->Paterno = $row['paterno'];
                $obj->Materno = $row['materno'];
                $obj->Contrasena = $row['contrasena'];
                $obj->Roles = Usuario::ListarRolPorIdUsuario($obj->IdUsuario);
        }
        return $obj;                
    }
        
    static public function Obtener($idUsuario){
        global $dbh;
        $dbh->query("SET NAMES 'utf8'");
        
        $sql = 'select
                    idusuario,
                    nombres,
                    paterno,
                    materno,
                    email,
                    idinstitucion,
                    contrasena,
                    idpais,
                    idtrack,
                    
                    Telefono,
					Cargo,
                    WebSite ,
                    NombreCompleto,
					NombreCredencial,
					destinatarioComprobante,
					rucNacional,
                    CodigoPostal,
                    Direccion,
                    Provincia,
                    Ciudad,
                    RestriccionesAlimentarias,
                    NumeroDocumento, 
                    genero,                  
                    IdTipoDocumento,
					ClienteSAP
                    from usuario
                where idusuario    = \''.$idUsuario.'\'';
                        
        $obj = new Usuario();
        foreach($dbh->query($sql) as $row) {
                $obj->Email = $row['email'];
                $obj->IdUsuario = $row['idusuario'];
                $obj->IdPais = $row['idpais'];
                $obj->IdInstitucion = $row['idinstitucion'];
                $obj->IdTrack = $row['idtrack'];
                $obj->Nombres = $row['nombres'];
                $obj->Paterno = $row['paterno'];
                $obj->Materno = $row['materno'];
                $obj->Contrasena = $row['contrasena'];
                
                $obj->Telefono = $row['Telefono'];
				$obj->Cargo = $row['Cargo'];
                $obj->WebSite = $row['WebSite'];
                $obj->NombreCompleto = $row['NombreCompleto'];
				$obj->NombreCredencial = $row['NombreCredencial'];
				$obj->destinatarioComprobante = $row['destinatarioComprobante'];
				$obj->rucNacional = $row['rucNacional'];
                $obj->CodigoPostal = $row['CodigoPostal'];
                $obj->Direccion = $row['Direccion'];
                $obj->Provincia = $row['Provincia'];
                $obj->Ciudad = $row['Ciudad'];
                $obj->Genero = $row['genero'];
                $obj->RestriccionesAlimentarias = $row['RestriccionesAlimentarias'];
                $obj->NumeroDocumento = $row['NumeroDocumento']; 
				
				if($row["IdTipoDocumento"])					
				$obj->TipoDocumento = TipoDocumento::Obtener($row['IdTipoDocumento']);
                $obj->IdTipoDocumento = $row['IdTipoDocumento'];
                $obj->Roles = Usuario::ListarRolPorIdUsuario($idUsuario);
                
                if($row["idtrack"])
                $obj->Track = Track::Obtener($row["idtrack"]);
                $obj->Pais = Pais::Obtener($row["idpais"]);
				$obj->ClienteSAP = $row['ClienteSAP'];
                $obj->Institucion = Institucion::Obtener($row["idinstitucion"]);
        }
        return $obj;
    }
    
    public function Insertar(){
        global $dbh;
        
    
        if($this->IdUsuario){
            //contrasena = \''.$this->Contrasena.'\',
            $sql = '
                update
                    usuario
                set                    
                    nombres = \''.$this->Nombres.'\',
                    paterno = \''.$this->Paterno.'\',
                    materno = \''.$this->Materno.'\',
                    email = \''.$this->Email.'\',
                    idpais = \''.$this->IdPais.'\',
                    idinstitucion = \''.$this->IdInstitucion.'\',
                    idtrack = \''.$this->IdTrack.'\',
                    genero = \''.$this->Genero.'\',
                    
                    Telefono = \''.$this->Telefono.'\',
					Cargo = \''.$this->Cargo.'\',
                    WebSite = \''.$this->WebSite.'\',
                    NombreCompleto = \''.$this->NombreCompleto.'\',
                    NombreCredencial = \''.$this->NombreCredencial.'\',
                    CodigoPostal = \''.$this->CodigoPostal.'\',
                    Direccion = \''.$this->Direccion.'\',
                    Provincia = \''.$this->Provincia.'\',
                    Ciudad = \''.$this->Ciudad.'\',
                    RestriccionesAlimentarias = \''.$this->RestriccionesAlimentarias.'\',
                    NumeroDocumento = \''.$this->NumeroDocumento.'\',
					IdTipoDocumento = \''.$this->IdTipoDocumento.'\',
                    ClienteSAP = \''.$this->ClienteSAP.'\',    
					idiomaRegistro = \''.$this->idiomaRegistro.'\',    
 					destinatarioComprobante = \''.$this->destinatarioComprobante.'\',    
					rucNacional = \''.$this->rucNacional.'\'	                
                where 
                    idusuario = \''.$this->IdUsuario.'\'';    
                    
                $temp_q_id = $dbh->prepare($sql);
                $temp_q_id->execute();
        }else{        
        
            //Validando que no ingrese otro correo que ya existe en la base de datos
            $sql = "select idusuario from usuario where email = '".$this->Email."'";
            $existeEmail = false;
            $idUsuario = 0 ;
            foreach($dbh->query($sql) as $row) {
                $existeEmail = true;
                $idUsuario = $row["idusuario"];
            }
            
            if($existeEmail){                
                $this->CargarUsuario($idUsuario);
            }else{        
                $sql = 'Insert into usuario 
                    (`idusuario`,
                    `contrasena`,
                    `nombres`,
                    `paterno`,
                    `materno`,
                    `email`,
                    `idpais`,
                    `idinstitucion`,
                    `EsDeseoModerador`,
                    `EsDeseoPanelista`,
                    `idtrack`,
                    
                    Telefono,
					Cargo,
                    WebSite ,
                    NombreCompleto,

                    CodigoPostal,
                    Direccion,
                    Provincia,
                    Ciudad,
                    RestriccionesAlimentarias,
                    NumeroDocumento,
                    IdTipoDocumento,
					ClienteSAP,
					genero,
					
					idiomaRegistro,
					NombreCredencial,
					destinatarioComprobante,
					rucNacional	
                    )
                    Value
                    (NULL,        
                    \''.$this->Contrasena.'\',
                    \''.strtoupper($this->Nombres).'\',
                    \''.strtoupper($this->Paterno).'\',
                    \''.strtoupper($this->Materno).'\',
                    \''.$this->Email.'\',
                    \''.$this->IdPais.'\',
                    \''.$this->IdInstitucion.'\',
                    \''.$this->EsDeseoModerador.'\',
                    \''.$this->EsDeseoPanelista.'\',
                    \''.$this->IdTrack.'\',
                    
                    \''.$this->Telefono.'\',
					\''.$this->Cargo.'\',
                    \''.$this->WebSite.'\',
                    \''.$this->NombreCompleto.'\',

                    \''.$this->CodigoPostal.'\',
                    \''.$this->Direccion.'\',
                    \''.$this->Provincia.'\',
                    \''.$this->Ciudad.'\',
                    \''.$this->RestriccionesAlimentarias.'\',
                    \''.$this->NumeroDocumento.'\',
					\''.$this->IdTipoDocumento.'\',
					\''.$this->ClienteSAP.'\',
					\''.$this->Genero.'\',
					
                    \''.$this->idiomaRegistro.'\',
					\''.$this->NombreCredencial.'\',
					\''.$this->destinatarioComprobante.'\',
					\''.$this->rucNacional.'\'
										
                    )';    
                    $temp_q_id = $dbh->prepare($sql);
                    $temp_q_id->execute();
                            
                    $this->IdUsuario = $dbh->lastInsertId();
            }                
        }        
		//echo $sql;
	
        
    }
    
    public function Actualizar(){
        global $dbh;
        //echo "hh";
        //echo $this->contrasena;
        if($this->contrasena != ""){
            $sql = "update usuario set usuario = '".$this->usuario."', contrasena = '".$this->contrasena."' where usuario_id = ".$this->usuario_id;
        }else{
            $sql = "update usuario set usuario = '".$this->usuario."' where usuario_id = ".$this->usuario_id;
        }

        $temp_q_id = $dbh->prepare($sql);
        if (!$temp_q_id) {
            echo "\nPDO::errorInfo():\n";                
        }
        $temp_q_id->execute();        
    }
    
    public function Eliminar(){
        global $dbh;
        
        $sql = "Delete from usuario where idusuario = ".$this->IdUsuario;
        $temp_q_id = $dbh->prepare($sql);
        if (!$temp_q_id) {
            echo "\nPDO::errorInfo():\n";                
        }
        $temp_q_id->execute();        
    }
    
    static public function LoginPago($email, $clave){
        global $dbh;
        
        $sql = 
            'select 
            idusuario,
            nombres,
            paterno,
            materno,
            email,
            contrasena            
        from usuario where email = \''.$email.'\'';    
        
        $obj = null;
        foreach($dbh->query($sql) as $row) {
            if($row['contrasena'] == $clave){            
                $obj = Usuario::Obtener($row["idusuario"]);                    
            }
        }
        return $obj;    
    }
    
    static public function Login($email, $clave,$idrol){
        global $dbh;
        
        $sql = 
            'select 
            idusuario,
            nombres,
            paterno,
            materno,
            email,
            contrasena            
        from usuario where email = \''.$email.'\'';
        
        $obj = null;
        foreach($dbh->query($sql) as $row) {
            if($row['contrasena'] == $clave){
            
                //Verificando con el rol ingresado                
                    $sql = "select idrol from usuario_rol where idusuario = ".$row["idusuario"]." and idrol = ".$idrol;
                    foreach($dbh->query($sql) as $rowUsuarioRol) {
                        $obj = Usuario::Obtener($row["idusuario"]);
                    }
            }
        }        
        return $obj;
    }
    
	static public function ObtenerPorEmail($email){
        global $dbh;
        
        $sql = 
            'select 
            idusuario,
            nombres,
            paterno,
            materno,
            email,
            contrasena            
        from usuario where email = \''.$email.'\'';
        
        $obj = null;
        foreach($dbh->query($sql) as $row) {
                        $obj = Usuario::Obtener($row["idusuario"]);
        }        
        return $obj;
    }
	
	
    static function ListarPorRol($idRol=0, $cargarTransaccionExitosa = 0, $idpais = 0, $pagante = "", $tipoParticipante = "0", $idTipoPago = "0"){
    
        global $dbh;
        
        $lista = array();
        
        if($idRol != 0){
            $condition = " and ur.idrol in (".$idRol.")";
        }
        
        if($idpais != 0){
            $condition .= " and u.idpais in (".$idpais.")";
        }
		
		
		if($pagante != ""){
			$condition .= " and u.idusuario in (select idusuario from transaccion where pagado = $pagante)";
		}
		
        if($tipoParticipante != "0"){
            $condition .= " and par.idtipoparticipante in (".$tipoParticipante.")";
        }				
		

		
        $sql = 'SELECT 
                u.`idusuario`,
                `nombres`,
                `paterno`,
                `materno`,
                `email`,
                idtrack,
                idrol,
                idinstitucion,
                ClienteSAP,
                genero,
                idpais,
                idTipoDocumento,
                NumeroDocumento,
                Ciudad,
                Provincia,
                CodigoPostal,
                Direccion,                
                Telefono,
				Cargo,
                RestriccionesAlimentarias,				
				IdTipoParticipante,
				rucNacional,
				destinatarioComprobante
				
                FROM `usuario` u
                inner join usuario_rol ur
                on ur.idusuario = u.idusuario 
				left join participante par 
				on par.IdUsuario = u.idusuario 
                where 1 = 1 
                '.$condition.'
                order by idusuario
                ';
        //echo $sql;
        
        foreach($dbh->query($sql) as $row){
            $item = new Usuario();
            
            $item->IdUsuario = $row["idusuario"];
            $item->Nombres = $row["nombres"];
            $item->Paterno = $row["paterno"];
            $item->Materno = $row["materno"];
            $item->Email = $row["email"];
            $item->ClienteSAP = $row["ClienteSAP"];
            $item->Genero = $row["genero"];
            $item->NumeroDocumento = $row["NumeroDocumento"];
            $item->Ciudad = $row["Ciudad"];
            $item->Provincia = $row["Provincia"];
            $item->Direccion = $row["Direccion"];
            $item->Telefono = $row["Telefono"];
			$item->Cargo = $row["Cargo"];
			
			$item->rucNacional = $row["rucNacional"];
            $item->destinatarioComprobante = $row["destinatarioComprobante"];
            $item->Rol = Rol::Obtener($row["idrol"]);
            
            //$sql2="select p.idparticipante from participante p where ".$row['idusuario']."=p.idusuario ";
            //$rs=mysql_query($sql2);
            //$row2=mysql_fetch_assoc($rs);
            
            if($row["idtrack"])
                $item->Track = Track::Obtener($row["idtrack"]);
                
            if($row["idinstitucion"]){
                $item->Institucion = Institucion::Obtener($row["idinstitucion"]);
            }            
            if($row["idpais"]){
                $item->Pais = Pais::Obtener($row["idpais"]);
            }
            if($row["idTipoDocumento"]){
                $item->TipoDocumento = TipoDocumento::Obtener($row["idTipoDocumento"]);
            }
			
        	if($row["IdTipoParticipante"]){
                $item->TipoParticipante = TipoParticipante::Obtener($row["IdTipoParticipante"]);
            }
			
			if($cargarTransaccionExitosa == 1){
				$item->CargarTransaccionExitosa();	
			}
			
			if($idTipoPago != "0"){
				if($item->Transaccion->TipoPago != $idTipoPago){
					continue;
				}
			}
	        $lista[] = $item;
					
        }
		
		/*		echo "<pre>";
		print_r($lista);
		echo "</pre>";*/
		
        return $lista;
    }

    static function ListarRolPorIdUsuario($idUsuario){
    
        global $dbh;
                
        $sql = 'select 
                    r.id,
                    r.nombre
                    from rol r
                    inner join  usuario_rol ur
                    on ur.idrol = r.id
                    where ur.idusuario = \''.$idUsuario.'\'';
        //echo $sql;    
        $lista = array();

        foreach($dbh->query($sql) as $row) {
                $obj = new Rol($row['id'], $row['nombre']);
                
                $lista[] = $obj ;
        }
        return $lista;    
    }

    static function EliminarRolesPorIdUsuario($idUsuario){
    
        global $dbh;
        
        $sql = "Delete from usuario_rol where idusuario = ".$idUsuario;
        $temp_q_id = $dbh->prepare($sql);
        if (!$temp_q_id) {
            echo "\nPDO::errorInfo():\n";                
        }
        $temp_q_id->execute();        
    }

    public function CargarParticipante(){
        $this->Participante = Participante::Obtener($this->IdUsuario);
        //print_r($this->Participante);
    }
	
	public function CargarTransaccionExitosa(){
		$this->Transaccion = Transaccion::ObtenerTransaccionExitosa($this->IdUsuario);
	}
}

?>